﻿#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "searchdialog.h"
#include "aboutdialog.h"
#include "gitdialog.h"
#include "helpdialog.h"
#include "imagesizedialog.h"
#include "my_texteditor.h"

class QLabel;
class QSpinBox;
class QFontComboBox;
class QActionGroup;
class QSettings;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_actFontBold_triggered(bool checked);

    void on_txtEdit_copyAvailable(bool b);

    void on_actFontItalic_triggered(bool checked);

    void on_actFontUnder_triggered(bool checked);

    void on_actToolbarStyle_triggered(bool checked);

    void on_actOpen_triggered();

    void on_actNoWrap_triggered();

    void on_actWidgetWidth_triggered();

    void on_actFixedPixelWidth_triggered();

    void on_actSave_triggered();

    void on_actNew_triggered();

    void on_actSaveAs_triggered();

    void on_actSetTextColor_triggered();

    void on_actSearch_triggered();

    void on_actAbout_triggered();

    void on_actUpdateToGit_triggered();

    void on_actClear_triggered();

    void on_actLeftAlign_triggered();

    void on_actCenter_triggered();

    void on_actRightAlign_triggered();

    void on_actAcceptRichText_triggered(bool checked);

    void on_actSaveToRichText_triggered(bool checked);

    void on_actHelp_triggered();

    void on_actIndent_triggered(bool checked);

    void on_actAboutQt_triggered();

    void on_actWindowTop_triggered(bool checked);

    void on_actClearData_triggered();

    void on_actInsterPicture_triggered();

    void on_actInsterForm_triggered();

    void on_actCreateLink_triggered();

    // 自定义槽函数
    void spinFontSize_valueChanged(int);        // 改变字体大小
    void comboFont_currentIndexChanged(const QString &); // 选中文字改变(更新cut,copy,paste状态)
    void textChanged();              // 文字改变
    void CursorIsChanged();             // 光标位置改变
    void TextSearch(QString,bool,bool); // 搜索文本
    void currentCharFormatChanged(const QTextCharFormat &);
    void searchdialogClose();        // 搜索窗口关闭
    void RecentlyOpened(QAction*);
    void OpenFile(QString FileName);   // 打开文件

private:
    Ui::MainWindow *ui;

    ImageSizeDialog *m_ImageSizeDialog=nullptr;
    SearchDialog *m_SearchDialog=nullptr;
    AboutDialog *m_AboutDialog=nullptr;
    HelpDialog *m_HelpDialog=nullptr;
    GitDialog *m_GitDialog=nullptr;

    QString m_FileName;         // 当前文件名
    bool SaveToRichText=true;   // 保存为富文本
    bool OpenToRichText=true;   // 打开为富文本
    QSettings *settings;        // 设置

    QLabel *fLabCurFile;        // 文件名QLabel
    QLabel *isSaveLable;        // "文件以保存"Qlabel
    QLabel *nCurposLable;       // 光标位置QLabel
    QSpinBox *spinFontSize;     // 文本大小
    QFontComboBox *comboFont;   // 文本字体
    QActionGroup *alignmentGroup;// 字体对齐动作组

    void iniUI();
    void iniFile();
    void iniSignalSlots();
    bool SaveFile(QString &m_FileName);   // 写入文件

    void CheckFileIsSave();             // 检查文件是否保存
    void LoadSettings();                // 加载设置
    void SaveSettings();                // 保存设置

    void closeEvent(QCloseEvent *event); // 重写关闭事件
};

#endif // MAINWINDOW_H
